package com.quectel.constant.core.parkingcard;

import lombok.AllArgsConstructor;
import lombok.Getter;

public class ParkingCardOrderConstants {

    public static final Byte AUDIT_TYPE = 1;
    public static final Byte CLOSE_TYPE = 2;

    @AllArgsConstructor
    public static enum OrderPayTypeEnum {

        /**
         * 支付宝
         */
        ZFB((byte) 1),

        /**
         * 微信
         */
        WX((byte) 2),

        /**
         * 小程序
         */
        MP((byte) 3),

        /**
         * 线下
         */
        OFFLINE((byte) 9);

        @Getter
        private final Byte payType;
    }

    @AllArgsConstructor
    public static enum OrderPayStatusEnum {

        /**
         * 未缴费
         */
        NO_PAY((byte) 0),

        /**
         * 已缴费
         */
        PAY_SUCCESS((byte) 1),

        /**
         * 已退款
         */
        IS_REFUND((byte) 2);

        @Getter
        private final Byte payStatus;
    }

    @AllArgsConstructor
    public static enum OrderInvoiceStatusEnum {

        /**
         * 未提交开票
         */
        NO_INVOICE((byte) 0),

        /**
         * 开票中
         */
        INVOICING((byte) 1),

        /**
         * 已开票
         */
        INVOICED((byte) 2),

        /**
         * 已红冲
         */
        RED_OFFSET((byte) 3),

        /**
         * 已关闭
         */
        CLOSE((byte) 4);
        @Getter
        private final Byte invoiceStatus;
    }

    public static final String INVOICE_STATUSES_QUERY_NAME = "invoiceStatuses";

    @AllArgsConstructor
    public static enum OrderAuditStatusEnum {

        /**
         * 未审核
         */
        NO_AUDIT((byte) 1),

        /**
         * 已审核
         */
        AUDITED((byte) 2),

        /**
         * 已驳回
         */
        IS_REJECT((byte) 3);

        @Getter
        private final Byte auditStatus;
    }

    @AllArgsConstructor
    public static enum OrderSourceTypeEnum {

        /**
         * 住户
         */
        HOUSEHOLD((byte) 1),

        /**
         * 管理员
         */
        ADMIN((byte) 2);

        @Getter
        private final Byte sourceType;
    }

    @AllArgsConstructor
    public static enum OrderIsRegistCarEnum {

        /**
         * 未注册
         */
        NO_REGIST((byte) 0),

        /**
         * 已注册
         */
        IS_REGIST((byte) 1);

        @Getter
        private final Byte registStatus;
    }

    @AllArgsConstructor
    public static enum OrderCardTypeEnum {

        /**
         * 月卡
         */
        MONTH((byte) 1, 1),

        /**
         * 季卡
         */
        QUARTER((byte) 2, 3),

        /**
         * 半年卡
         */
        HALF((byte) 3, 6),

        /**
         * 年卡
         */
        year((byte) 4, 12);

        @Getter
        private final Byte cardType;
        @Getter
        private final Integer month;

        public static Integer getMonthByCardType(Byte cardType) {
            for (OrderCardTypeEnum value : values()) {
                if (value.cardType.equals(cardType)) {
                    return value.getMonth();
                }
            }
            return null;
        }
    }
}
